package com.coderly.onlinegallerysharingplatform.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.coderly.onlinegallerysharingplatform.common.response.Response;
import com.coderly.onlinegallerysharingplatform.model.dao.entity.PictureDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.coderly.onlinegallerysharingplatform.model.dto.req.pic.*;
import com.coderly.onlinegallerysharingplatform.model.dto.resp.pic.PictureRespDTO;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author 26788
 * @description 针对表【t_picture(图片表)】的数据库操作Service
 * @createDate 2025-03-07 11:27:18
 */
public interface PictureService extends IService<PictureDO> {


    /**
     * 上传图片
     * @param pictureSource
     * @param uploadPictureReqDTO
     * @return
     */
    PictureRespDTO uploadPicture(Object pictureSource, UploadPictureReqDTO uploadPictureReqDTO);

    /**
     * 删除图片
     * @param deletePictureReqDTO
     * @return
     */
    Boolean deletePicture(DeletePictureReqDTO deletePictureReqDTO);

    /**
     * 更新图片-管理员使用
     * @param updatePictureReqDTO
     * @return
     */
    Boolean updatePictureByAdmin(UpdatePictureReqDTO updatePictureReqDTO);


    /**
     * 编辑图片-用户使用
     * @param updatePictureReqDTO
     * @return
     */
    Boolean updatePictureByUser(UpdatePictureReqDTO updatePictureReqDTO);

    /**
     * 根据id获取图片封装类-用户使用
     * @param id
     * @return
     */
    PictureRespDTO getPictureByUserWithId(Long id);

    /**
     * 获取图片封装分页-用户使用
     * @param getPictureReqDTO
     * @return
     */
    Page<PictureRespDTO> listPicturePageByUser(GetPictureReqDTO getPictureReqDTO);


    /**
     * 获取图片封装分页-管理员使用
     * @param getPictureReqDTO
     * @return
     */
    Page<PictureDO> listPicturePageByAdmin(GetPictureReqDTO getPictureReqDTO);

    /**
     * 获取指定用户发布在公共图库中已通过图片列表-用户使用
     * @param getPictureReqDTO
     * @return
     */
    Page<PictureRespDTO> listPublicApprovedPicturePageByUser(GetPictureReqDTO getPictureReqDTO);

    /**
     * 查询指定用户发布在公共图库中所有的图片列表
     * @param getPictureReqDTO
     * @return
     */
    Page<PictureRespDTO> listPublicPicturePageByUser(GetPictureReqDTO getPictureReqDTO);

    /**
     * 审核图片
     *
     * @param reviewPictureReqDTO 审核请求对象
     */
    void reviewPictureByAdmin(ReviewPictureReqDTO reviewPictureReqDTO);

    /**
     * 点赞图片
     * @param likePictureReqDTO
     * @return
     */
    Boolean likePicture(LikePictureReqDTO likePictureReqDTO);

    /**
     * 取消点赞图片
     *
     * @param unLikePictureReqDTO
     * @return
     */
    Boolean unLikePicture(UnLikePictureReqDTO unLikePictureReqDTO);

    /**
     * 分享图片
     * @param sharePictureReqDTO
     * @return
     */
    Boolean sharePicture(SharePictureReqDTO sharePictureReqDTO);

    /**
     * 取消分享图片
     *
     * @param unSharePictureReqDTO
     * @return
     */
    Boolean unSharePicture(UnSharePictureReqDTO unSharePictureReqDTO);
}